Skip to main content

NeoDesktop集成Linux图形化界面文档

前言

目前 Neo 集成了一个完整的 termux,与 termux app 完全独立,软件源是根据 termux-package 编译的,编译一次大概需要一天的时间,目前编译了 2800+ 的包

由于与 termux 完全独立,所以 termux-x11 也需要配合 Neo 的包名,需要重新编译一个版本

Termux X11 Neo 下载

创建 Linux 容器

目前我已经编写好了一键创建的命令 打开 Neo 自带终端,执行

install_debian

然后就是漫长的等待,终端一直在输出问题就不大,软件源我已经换成了清华源,不用梯子

我后面会尝试做一个整合包

运行 Linux 容器

直接启动会有个问题,termux-x11-neo 会被打开,Neo 会被切换到后台,而 x11 和 Neo 是需要通信的,但是小米这类,就会直接掐断他们之间的连接

所以你要么将 Neo 悬浮窗出来

要么就先在 Neo 中打开 termux-x11-neo

打开后是这样的

image

这个时候我们再打开 Neo 的终端

./start_debian_x11.sh

如图

运行其他的发行版

参考代码

String setupDebian = r'''
function install_debian() {
chmod +x $HOME/start_debian_x11.sh
apt update
apt install proot-distro -y
apt install termux-x11-nightly -y
apt install pulseaudio -y
apt install wget -y
apt install libpsl -y
# proot-distro install debian
# download xz from https://nightmare.press/YanTool/container/debian-bookworm-aarch64-pd-v4.17.3.tar.xz
if [ ! -f $HOME/debian-bookworm-aarch64-pd-v4.17.3.tar.xz ]; then
curl -L https://nightmare.press/YanTool/container/debian-bookworm-aarch64-pd-v4.17.3.tar.xz -o $HOME/debian-bookworm-aarch64-pd-v4.17.3.tar.xz
fi
DEBIAN_PATH=$TERMUX_PREFIX/var/lib/proot-distro/installed-rootfs/debian
mkdir -p $DEBIAN_PATH
# unzip debian-bookworm-aarch64-pd-v4.17.3.tar.xz to $DEBIAN_PATH
tar -xf $HOME/debian-bookworm-aarch64-pd-v4.17.3.tar.xz -C $DEBIAN_PATH
mv $DEBIAN_PATH/debian-bookworm-aarch64/* $DEBIAN_PATH/
proot-distro login debian --termux-home -- /bin/bash -c "source ./bootstrap.sh && setup_debian"
}
function setup_debian() {
# 备份原有源文件
cp /etc/apt/sources.list /etc/apt/sources.list.backup
echo "nameserver 8.8.8.8" > /etc/resolv.conf
echo "nameserver 114.114.114.114" >> /etc/resolv.conf

# 写入清华大学源(支持 aarch64/arm64)
cat > /etc/apt/sources.list << EOF
# 清华大学 Debian 源
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware

deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
EOF

# 更新软件包列表并安装 xfce4 桌面环境
apt update -y
apt install -y nano adduser sudo
# 自动创建用户neo并设置密码为1
echo "添加neo用户并设置密码..."
useradd -m -s /bin/bash neo
echo "neo:1" | chpasswd

# 给用户添加sudo权限
echo "设置sudo权限..."
echo "neo ALL=(ALL:ALL) ALL" >> /etc/sudoers
# 预配置键盘布局选项
echo "keyboard-configuration keyboard-configuration/layout select 'English (US)'" | debconf-set-selections
echo "keyboard-configuration keyboard-configuration/variant select 'English (US)'" | debconf-set-selections
echo "keyboard-configuration keyboard-configuration/model select Generic 105-key PC" | debconf-set-selections
echo "keyboard-configuration keyboard-configuration/layoutcode string us" | debconf-set-selections
echo "keyboard-configuration keyboard-configuration/xkb-keymap select us" | debconf-set-selections

# 设置为非交互式模式
export DEBIAN_FRONTEND=noninteractive

# 安装 DBus 和相关依赖
apt install dbus-x11 at-spi2-core dbus policykit-1 -y

# 安装 xfce4 桌面环境
apt install xfce4 xfce4-terminal -y

# 启动 DBus 服务
mkdir -p /var/run/dbus
dbus-daemon --system

# 恢复正常的前端设置
export DEBIAN_FRONTEND=dialog

apt install -y firefox-esr chromium

# 可选:创建浏览器桌面快捷方式
mkdir -p /usr/share/applications
update-desktop-database

# 安装中文字体
apt install -y fonts-noto-cjk fonts-wqy-zenhei fonts-wqy-microhei xfonts-intl-chinese

# 设置中文语言环境
apt install -y locales
sed -i 's/# zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/g' /etc/locale.gen
locale-gen zh_CN.UTF-8

# 安装中文输入法
apt install -y fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk3 fcitx5-config-qt

# 创建配置目录
mkdir -p /root/.config/fcitx5/conf
mkdir -p /root/.config/autostart

# 创建Fcitx5的自启动项
cat > /root/.config/autostart/fcitx5.desktop << EOF
[Desktop Entry]
Name=Fcitx5
Comment=Start Fcitx5 Input Method
Exec=fcitx5
Icon=fcitx
Terminal=false
Type=Application
Categories=System;Utility;
StartupNotify=false
X-GNOME-Autostart-Phase=Applications
X-GNOME-AutoRestart=false
X-GNOME-Autostart-Notify=false
X-KDE-autostart-after=panel
X-KDE-StartupNotify=false
EOF

# 设置系统环境变量,以便应用程序使用fcitx5
cat > /etc/profile.d/fcitx5.sh << EOF
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
EOF

# 设置默认键盘布局
cat > /root/.config/fcitx5/profile << EOF
[Groups/0]
# Group Name
Name=Default
# Layout
Default Layout=us
# Default Input Method
DefaultIM=pinyin

[Groups/0/Items/0]
# Name
Name=keyboard-us
# Layout
Layout=

[Groups/0/Items/1]
# Name
Name=pinyin
# Layout
Layout=

[GroupOrder]
0=Default
EOF
}
''';
String startDebianX11Script = r'''
#!/data/data/com.nightmare.neo/files/usr/bin/bash

# Kill open X11 processes
kill -9 $(pgrep -f "termux.x11") 2>/dev/null

# Enable PulseAudio over Network
pulseaudio --start --load="module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1" --exit-idle-time=-1

# Prepare termux-x11 session
export XDG_RUNTIME_DIR=${TMPDIR}
termux-x11 :0 >/dev/null &

# Wait a bit until termux-x11 gets started.
sleep 3

# Launch Termux X11 main activity
am start --user 0 -n com.termux.x11/com.termux.x11.MainActivity > /dev/null 2>&1
sleep 1

# Login in PRoot Environment. Do some initialization for PulseAudio, /tmp directory
# and run XFCE4 as user droidmaster.
# See also: https://github.com/termux/proot-distro
# Argument -- acts as terminator of proot-distro login options processing.
# All arguments behind it would not be treated as options of PRoot Distro.
proot-distro login debian --shared-tmp -- /bin/bash -c 'export PULSE_SERVER=127.0.0.1 && export XDG_RUNTIME_DIR=${TMPDIR} && su - neo -c "env DISPLAY=:0 startxfce4"'

exit 0
''';

参考文档 https://github.com/LinuxDroidMaster/Termux-Desktops/blob/main/Documentation/proot/ubuntu_proot.md